#!/usr/bin/env node

import { execSync } from 'child_process';
import readline from 'readline';
import path from 'path';
import { fileURLToPath } from 'url';
import fs from 'fs';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

console.log('🚀 版本发布工具\n');

// 读取 package.json 获取当前版本
const packagePath = path.join(__dirname, '..', 'package.json');
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
const currentVersion = packageJson.version;

console.log(`当前版本: ${currentVersion}`);

// 版本类型选项
const versionTypes = [
  { value: 'patch', label: '修订版本 (0.0.x)', increment: (v) => v.split('.').map((n, i) => i === 2 ? parseInt(n) + 1 : n).join('.') },
  { value: 'minor', label: '次版本 (0.x.0)', increment: (v) => v.split('.').map((n, i) => i === 1 ? parseInt(n) + 1 : i === 2 ? 0 : n).join('.') },
  { value: 'major', label: '主版本 (x.0.0)', increment: (v) => v.split('.').map((n, i) => i === 0 ? parseInt(n) + 1 : 0).join('.') }
];

console.log('\n请选择版本类型:');
versionTypes.forEach((type, index) => {
  const newVersion = type.increment(currentVersion);
  console.log(`${index + 1}. ${type.value} - ${type.label} (${currentVersion} → ${newVersion})`);
});

rl.question('\n请输入选项编号 (1-3): ', (typeIndex) => {
  const selectedType = versionTypes[parseInt(typeIndex) - 1];
  
  if (!selectedType) {
    console.log('❌ 无效的选项');
    rl.close();
    return;
  }
  
  const newVersion = selectedType.increment(currentVersion);
  
  rl.question(`\n确认发布版本 ${newVersion}? (y/N): `, (confirm) => {
    if (confirm.toLowerCase() !== 'y' && confirm.toLowerCase() !== 'yes') {
      console.log('❌ 已取消发布');
      rl.close();
      return;
    }
    
    try {
      // 更新 package.json 版本
      packageJson.version = newVersion;
      fs.writeFileSync(packagePath, JSON.stringify(packageJson, null, 2) + '\n');
      
      // 更新 CHANGELOG.md
      const updateScript = path.join(__dirname, 'update-changelog.js');
      execSync(`node "${updateScript}" "" "" release "${newVersion}"`, { stdio: 'inherit' });
      
      // 提交版本更新
      execSync('git add .', { stdio: 'inherit' });
      execSync(`git commit -m "chore: release version ${newVersion}"`, { stdio: 'inherit' });
      
      // 创建版本标签
      execSync(`git tag -a v${newVersion} -m "Release version ${newVersion}"`, { stdio: 'inherit' });
      
      console.log('\n✅ 版本发布成功！');
      console.log(`📦 新版本: ${newVersion}`);
      console.log('🏷️ 已创建版本标签');
      console.log('📋 CHANGELOG.md 已更新');
      
      // 询问是否推送到远程仓库
      rl.question('\n是否推送到远程仓库? (y/N): ', (pushConfirm) => {
        if (pushConfirm.toLowerCase() === 'y' || pushConfirm.toLowerCase() === 'yes') {
          try {
            execSync('git push', { stdio: 'inherit' });
            execSync(`git push origin v${newVersion}`, { stdio: 'inherit' });
            console.log('🚀 已推送到远程仓库');
          } catch (error) {
            console.error('❌ 推送失败:', error.message);
          }
        }
        rl.close();
      });
      
    } catch (error) {
      console.error('❌ 版本发布失败:', error.message);
      rl.close();
    }
  });
});
